/*-------------------------------------------------------------------------
 *
 * pgarch.h
 *	  来自 postmaster/pgarch.c 的导出。
 *
 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/postmaster/pgarch.h
 *
 *-------------------------------------------------------------------------
 */
#ifndef _PGARCH_H
#define _PGARCH_H

/* ----------
 * 存档控制信息。
 *
 * 我们预计 pg_wal 中可存档的文件名称长度在
 * MIN_XFN_CHARS 和 MAX_XFN_CHARS 之间，仅包含出现在 VALID_XFN_CHARS 中的字符。
 * archive_status 中的状态文件具有对应的名称，附加 ".ready" 或 ".done"。
 * ----------
 */
#define MIN_XFN_CHARS	16
#define MAX_XFN_CHARS	40
#define VALID_XFN_CHARS "0123456789ABCDEF.history.backup.partial"

extern Size PgArchShmemSize(void);
extern void PgArchShmemInit(void);
extern bool PgArchCanRestart(void);
extern void PgArchiverMain(void) pg_attribute_noreturn();
extern void PgArchWakeup(void);
extern void PgArchForceDirScan(void);

/*
 * archive_library GUC 的值。
 */
extern PGDLLIMPORT char *XLogArchiveLibrary;

/*
 * 存档模块回调
 *
 * 这些回调函数应由存档库定义，并通过 _PG_archive_module_init() 返回。
 * ArchiveFileCB 是唯一必需的回调。
 * 有关每个回调的用途的更多信息，请参阅存档模块文档。
 */
typedef bool (*ArchiveCheckConfiguredCB) (void);
typedef bool (*ArchiveFileCB) (const char *file, const char *path);
typedef void (*ArchiveShutdownCB) (void);

typedef struct ArchiveModuleCallbacks
{
	ArchiveCheckConfiguredCB check_configured_cb;
	ArchiveFileCB archive_file_cb;
	ArchiveShutdownCB shutdown_cb;
} ArchiveModuleCallbacks;

/*
 * 加载存档库时查找的共享库符号 _PG_archive_module_init 的类型。
 */
typedef void (*ArchiveModuleInit) (ArchiveModuleCallbacks *cb);

/*
 * 由于通过 Shell 命令进行存档的逻辑在核心服务器中，
 * 不需要通过共享库加载，因此有一个特殊的初始化函数。
 */
extern void shell_archive_init(ArchiveModuleCallbacks *cb);

#endif							/* _PGARCH_H */
